<script>
  // 是因为for in遍历的是可枚举的属性名
  // 比如
  var arr = [3, 5, 7]
  arr.foo = 'hello'

  //   for (var i in arr) {
  //     console.log(i) // logs "0", "1", "2", "foo"
  //   }

  //   console.log('------------------------')
  //   //而 for of 遍历的是对象的迭代器
  //   for (var i of arr) {
  //     console.log(i) // logs "3", "5", "7"
  //     // it doesn't log "3", "5", "7", "hello"
  //   }

  function double(num) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        return resolve(num * num)
      }, 1000)
    })
  }

  //   arr.forEach((i) => {
  //     double(i).then((res) => {
  //       console.log(res)
  //     })
  //   })
  //   for (const key in arr) {
  //     double(key).then((res) => {
  //       console.log(res)
  //     })
  //   }
  //for of异步
  !(async function () {
    for (const iterator of arr) {
      let res = await double(iterator)
      console.log(res)
    }
  })()
</script>
